/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package sofia.Persistencia.Managers;


import Principal.MainSofia;
import java.util.Iterator;
import java.util.List;
import javax.persistence.EntityExistsException;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.PersistenceUnit;
import javax.persistence.Query;
import javax.persistence.RollbackException;
import sofia.LogicaNegocio.InformeFisio;
import sofia.Persistencia.Entidades.EFisioterapeuta;
import sofia.Persistencia.Entidades.EInformeFisio;
/**
 *
 * @author crisfalt
 */
public class MInformeFisio {

        @PersistenceUnit
        private EntityManagerFactory managerFactory;
        private EntityManager entityManager;

        public MInformeFisio() {
                managerFactory = MainSofia.managerFactory;
                entityManager = managerFactory.createEntityManager();
        }

        public void crearInformeFisio( final InformeFisio informe , final int idLogin ) throws RollbackException, EntityExistsException {
                entityManager.clear();
                EInformeFisio entidadInforme = new EInformeFisio();
                entidadInforme.setDescripcion( informe.getDescripcion() );
                entidadInforme.setComentarioCoordinador( "" );
                EFisioterapeuta entidadFisio = entityManager.find( EFisioterapeuta.class , idLogin );
                entidadInforme.setLoginFisioId( entidadFisio.getIdLogin() );

                //persiste el objeto en la entidad
                EntityTransaction transaccion = entityManager.getTransaction();
                try {
                        transaccion.begin();
                        entityManager.persist( entidadInforme );
                }
                catch (EntityExistsException ex) {
                        throw ex;
                }
                finally {
                        transaccion.commit();
                }
                entityManager.clear();
        }

        //Sirve para cuando un coordinador qiere acceder al informe y hacer un comentario de ese informe
        public void actualizarInformeFisio( final int id , final InformeFisio informe , final String idFisio ) {
                entityManager.clear();
                EInformeFisio entidadInforme;
                EntityTransaction transaccion = entityManager.getTransaction();
                transaccion.begin();
                entidadInforme = entityManager.find( EInformeFisio.class , id );
                transaccion.commit();
                if( informe != null ) {
                        entidadInforme.setDescripcion( informe.getDescripcion() );
                        entidadInforme.setComentarioCoordinador( informe.getComentarioCoordinador() );
                        EFisioterapeuta entidadFisio = entityManager.find( EFisioterapeuta.class , idFisio );
                        entidadInforme.setLoginFisioId( entidadFisio.getIdLogin() );

                        transaccion.begin();
                        entityManager.merge( entidadInforme );
                        transaccion.commit();
                }
                entityManager.clear();
        }

        public void eliminarInformeFisio( final int idInformeFisio ) {
                entityManager.clear();
                EInformeFisio entidadInforme;
                EntityTransaction transaccion = entityManager.getTransaction();
                transaccion.begin();
                entidadInforme = entityManager.find( EInformeFisio.class , idInformeFisio );
                entityManager.remove( entidadInforme );
                transaccion.commit();
                entityManager.clear();
        }

        public InformeFisio obtenerInformeFisio( final int id ) {
                entityManager.clear();
                EInformeFisio entidadInforme;
                InformeFisio informeFisio = null;
                EntityTransaction transaccion = entityManager.getTransaction();
                transaccion.begin();
                entidadInforme = entityManager.find( EInformeFisio.class , id );
                transaccion.commit();
                if( entidadInforme != null ) {
//                        informeFisio = new InformeFisio();
//                        informeFisio.setComentarioCoordinador( entidadInforme.getComentarioCoordinador() );
//                        informeFisio.setDescripcion( entidadInforme.getDescripcion() );
//                        informeFisio.setIdLogin( entidadInforme.getLoginFisioId() );
                }
                entityManager.clear();
                return informeFisio;
        }

        public List obtenerInformesRegistrados() {
                entityManager.clear();
                EntityTransaction transaccion = entityManager.getTransaction();
                transaccion.begin();
                List informes = null;
                Query query = entityManager.createQuery( "SELECT eInformeFisio FROM EInformeFisio eInformeFisio" );
                informes = query.getResultList();
                transaccion.commit();
                if( !informes.isEmpty() ) {
                        System.out.println( "Leyendo " + informes.size() + " comentarios" );
                        Iterator stIterator = informes.iterator();
                        while( stIterator.hasNext() ){
                                EInformeFisio entidadInformefi = (EInformeFisio)stIterator.next();
                                System.out.println( "id Informe " + entidadInformefi.getIdInforme() );
                                System.out.println( "id fisio " + entidadInformefi.getLoginFisioId() );
                                System.out.println( "comentario Coordinador " + entidadInformefi.getComentarioCoordinador() );
                                System.out.println( "descrpcion " + entidadInformefi.getDescripcion() );
                        }
                }
                entityManager.clear();
                return informes;
        }

}
